/**
 * ECP Web开发通用枚举选择控件.
 * Copyright(c) 2012-2020 YGSoft.Inc
 * @author zhengxianwei 
 * @date 2016-04-13
 */
define(["jquery","ecp.service","ecp.utils","ecp.component.comboBox","ecp.utils.i18n"],function($,ecp,jstree,utils,$entityselect,i18n){
	/**
	 * 默认参数.
	 */
	var defaultOptions = {
		multiple:false,
		idField: "enumid",
		textField: "enumvalue"
	};
	var beanId = "com.ygsoft.ecp.component.bizcontrol.service.enumselect.context.IEnumValueSelectContext";
	var method = "findEnumValueByTypeIDs";
	/**
	 * 声明EnumSelect对象.
	 * @param {Object} origControl 控件的jQuery对象，即占位符。
	 * @param {Object} option 控件的属性对象
	 */
	var EnumSelect = function(control,option){
		if(!control || control.length === 0){return;}
		//初始化
		this.init(control,option);
		//渲染控件
		this._render();
	}
	/**
	 * 通过原型定义相关方法，比如渲染、赋值等等.
	 */
	EnumSelect.prototype = {
			/**
			 * 初始化.
			 * @param {Object} control 控件的jQuery对象，即占位符。
	    	 * @param {Object} option 控件的属性对象
			 */
			init: function(control, option){
				this.control = control;
				var dOpt = this.control.attr("data-option");
				if(dOpt && dOpt.length !== 0){
					dOpt = $.parseJSON(dOpt);
				}else{
					dOpt = {};
				}
				this.option = $.extend(true,{},defaultOptions,option,dOpt);
			    //下拉数据回调函数
				if(!this.option.data){
					this.option.dataSource = this.getDatasByEnumTypeId;
				}
			},
			
			/**
	    	 * 渲染.
	    	 */
			_render: function(){
				this.comboBox = this.control.comboBox(this.option);
				this.comboBox.base(this);
	    	},
	    	
	    	/**
	    	 * 获得comboBox对象.
	    	 */
	    	getComboBox: function(){
	    		return this.comboBox;
	    	},
	    	
	    	/**
	    	 * 通过枚举类型ID获取枚举数据.
	    	 * 如果没有指定entityTypeId值，就取options.enumDataFun回调函数，再没有定义就取options.datas给枚举赋值.
	    	 * @param {Function} callback 回调
	    	 * @param {Object} option 控件的属性对象
	    	 * @param {Object} filter 过滤对象
	    	 */
	    	getDatasByEnumTypeId: function(callback,option,filter){
	    		var	etId = option.entityTypeId;
	    		if(etId && etId.length !== 0){
	    			//获取所有菜单
	    			ecp.RemoteService.doPostAsync(beanId,method,[etId],function(result){
	    				if(result.isSuccess()){
	    	            	callback(result.data);
	    				}
		    		});
	    		}
	    	}
	};
	
	(function($) {
		var old = $.fn.enumSelect;
		$.fn.enumSelect = function(option){
			var me = this;
			if(!me || me.length === 0){
				if(window.console){
					window.console.error("ecp.component.enumSelect"+i18n.select.renderError);
				}
				return;
			}
			option = option || {};
			var value;
			//如果第一个参数传入的是对象或空则初始化空件，如果传入的是字符串，则认为是调用里面的内部方法。
			if (typeof(option) === "object") {
				this.each(function() {
					var instanceOptions = $.extend({}, option, true);
					var instance = new EnumSelect($(this), instanceOptions);
					this.enumSelect = instance;
				});
				return this[0].enumSelect;
			}
		};
		$.fn.enumSelect.Constructor = EnumSelect;
		$.fn.enumSelect.noConflict = function() {
			$.fn.enumSelect = old;
			return this;
		};
	}(jQuery));
	return EnumSelect;
});